<?php
/**
 * WordPress Spider Monitor 性能优化配置
 * 此文件包含性能优化相关的配置和函数
 */

// 防止直接访问
if (!defined('ABSPATH')) {
    exit;
}

class WP_Spider_Monitor_Performance {
    
    /**
     * 初始化性能优化
     */
    public static function init() {
        // 添加缓存清理钩子
        add_action('wp_spider_clear_cache', array(__CLASS__, 'clear_all_cache'));
        
        // 优化数据库查询
        add_filter('wp_spider_optimize_query', array(__CLASS__, 'optimize_database_query'), 10, 1);
    }
    
    /**
     * 清理所有缓存
     */
    public static function clear_all_cache() {
        global $wpdb;
        
        // 清理所有spider相关的transient缓存
        $wpdb->query("DELETE FROM {$wpdb->options} WHERE option_name LIKE '_transient_spider_%'");
        $wpdb->query("DELETE FROM {$wpdb->options} WHERE option_name LIKE '_transient_timeout_spider_%'");
        
        // 清理对象缓存
        if (function_exists('wp_cache_flush')) {
            wp_cache_flush();
        }
    }
    
    /**
     * 优化数据库查询
     */
    public static function optimize_database_query($query) {
        // 添加查询优化逻辑
        return $query;
    }
    
    /**
     * 获取缓存数据
     */
    public static function get_cached_data($key, $callback, $expiration = 300) {
        $cached_data = get_transient($key);
        
        if (false === $cached_data) {
            $cached_data = call_user_func($callback);
            if ($cached_data !== false) {
                set_transient($key, $cached_data, $expiration);
            }
        }
        
        return $cached_data;
    }
    
    /**
     * 批量获取数据以减少数据库查询
     */
    public static function batch_get_data($queries) {
        global $wpdb;
        
        $results = array();
        
        // 合并多个查询为单个查询（如果可能）
        foreach ($queries as $key => $query) {
            $results[$key] = $wpdb->get_results($query);
        }
        
        return $results;
    }
    
    /**
     * 延迟加载非关键数据
     */
    public static function lazy_load_data($data_key, $callback, $delay = 1000) {
        ?>
        <script>
        setTimeout(function() {
            jQuery.post(ajaxurl, {
                action: 'spider_lazy_load',
                data_key: '<?php echo esc_js($data_key); ?>',
                nonce: '<?php echo wp_create_nonce('wp_spider_monitor_nonce'); ?>'
            }, function(response) {
                if (response.success) {
                    <?php echo $callback; ?>(response.data);
                }
            });
        }, <?php echo intval($delay); ?>);
        </script>
        <?php
    }
    
    /**
     * 压缩输出
     */
    public static function compress_output() {
        if (!ob_get_level()) {
            ob_start('ob_gzhandler');
        }
    }
    
    /**
     * 预加载关键资源
     */
    public static function preload_resources() {
        // 检查常量是否已定义
        if (!defined('WP_SPIDER_MONITOR_PLUGIN_URL')) {
            return;
        }
        
        $plugin_url = WP_SPIDER_MONITOR_PLUGIN_URL;
        
        echo '<link rel="preload" href="' . $plugin_url . 'assets/js/chart.min.js" as="script">';
        echo '<link rel="preload" href="' . $plugin_url . 'assets/admin.css" as="style">';
    }
}

// 初始化性能优化
WP_Spider_Monitor_Performance::init();
